diff -upr beignet.orig/backend/src/backend/program.cpp beignet/backend/src/backend/program.cpp
--- beignet.orig/backend/src/backend/program.cpp	2020-04-16 03:44:21.153955099 +0300
+++ beignet/backend/src/backend/program.cpp	2020-04-16 03:47:50.369205839 +0300
@@ -694,9 +694,14 @@ namespace gbe {
 #endif
                 );
 
+    llvm::cl::ResetAllOptionOccurrences();
     clang::CompilerInvocation::CreateFromArgs(*CI,
+#if LLVM_VERSION_MAJOR < 10
                                               &args[0],
                                               &args[0] + args.size(),
+#else
+                                              clang::ArrayRef<const char*>(args),
+#endif
                                               Diags);
     // Create the compiler instance
     clang::CompilerInstance Clang;
@@ -1242,8 +1247,12 @@ EXTEND_QUOTE:
       // Create the compiler invocation
       std::unique_ptr<clang::CompilerInvocation> CI(new clang::CompilerInvocation);
       return clang::CompilerInvocation::CreateFromArgs(*CI,
+#if LLVM_VERSION_MAJOR < 10
                                                        &args[0],
                                                        &args[0] + args.size(),
+#else
+                                                       clang::ArrayRef<const char*>(args),
+#endif
                                                        Diags);
     }
 #endif
Only in beignet/backend/src/backend: program.cpp.orig
Only in beignet.orig/backend/src: CMakeLists.txt.orig
diff -upr beignet.orig/backend/src/llvm/llvm_gen_backend.cpp beignet/backend/src/llvm/llvm_gen_backend.cpp
--- beignet.orig/backend/src/llvm/llvm_gen_backend.cpp	2020-04-16 03:44:21.783970632 +0300
+++ beignet/backend/src/llvm/llvm_gen_backend.cpp	2020-04-16 03:45:04.141685867 +0300
@@ -575,11 +575,13 @@ namespace gbe
         has_errors(false),
         legacyMode(true)
     {
+#if LLVM_VERSION_MAJOR < 10
 #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 37
       initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
 #else
       initializeLoopInfoPass(*PassRegistry::getPassRegistry());
 #endif
+#endif
       pass = PASS_EMIT_REGISTERS;
     }
 
diff -upr beignet.orig/backend/src/llvm/llvm_gen_backend.hpp beignet/backend/src/llvm/llvm_gen_backend.hpp
--- beignet.orig/backend/src/llvm/llvm_gen_backend.hpp	2020-04-16 03:44:21.177289008 +0300
+++ beignet/backend/src/llvm/llvm_gen_backend.hpp	2020-04-16 03:45:04.135019035 +0300
@@ -130,10 +130,10 @@ namespace gbe
   llvm::FunctionPass *createGenPass(ir::Unit &unit);
 
   /*! Remove the GEP instructions */
-  llvm::BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit);
+  llvm::FunctionPass *createRemoveGEPPass(const ir::Unit &unit);
 
   /*! Merge load/store if possible */
-  llvm::BasicBlockPass *createLoadStoreOptimizationPass();
+  llvm::FunctionPass *createLoadStoreOptimizationPass();
 
   /*! Scalarize all vector op instructions */
   llvm::FunctionPass* createScalarizePass();
@@ -141,7 +141,7 @@ namespace gbe
   llvm::ModulePass* createBarrierNodupPass(bool);
 
   /*! Convert the Intrinsic call to gen function */
-  llvm::BasicBlockPass *createIntrinsicLoweringPass();
+  llvm::FunctionPass *createIntrinsicLoweringPass();
 
   /*! Passer the printf function call. */
   llvm::FunctionPass* createPrintfParserPass(ir::Unit &unit);
diff -upr beignet.orig/backend/src/llvm/llvm_intrinsic_lowering.cpp beignet/backend/src/llvm/llvm_intrinsic_lowering.cpp
--- beignet.orig/backend/src/llvm/llvm_intrinsic_lowering.cpp	2020-04-16 03:44:21.783970632 +0300
+++ beignet/backend/src/llvm/llvm_intrinsic_lowering.cpp	2020-04-16 03:45:04.135019035 +0300
@@ -29,12 +29,12 @@
 using namespace llvm;
 
 namespace gbe {
-    class InstrinsicLowering : public BasicBlockPass
+    class InstrinsicLowering : public FunctionPass
     {
     public:
       static char ID;
       InstrinsicLowering() :
-        BasicBlockPass(ID) {}
+        FunctionPass(ID) {}
 
       void getAnalysisUsage(AnalysisUsage &AU) const {
 
@@ -93,9 +93,9 @@ namespace gbe {
         CI->eraseFromParent();
         return NewCI;
       }
-      virtual bool runOnBasicBlock(BasicBlock &BB)
+      virtual bool runOnFunction(Function &F)
       {
-        bool changedBlock = false;
+        for (BasicBlock &BB : F) {
         Module *M = BB.getParent()->getParent();
 
         DataLayout TD(M);
@@ -159,13 +159,14 @@ namespace gbe {
             }
           }
         }
-        return changedBlock;
+        }
+        return true;
       }
     };
 
     char InstrinsicLowering::ID = 0;
 
-    BasicBlockPass *createIntrinsicLoweringPass() {
+    FunctionPass *createIntrinsicLoweringPass() {
       return new InstrinsicLowering();
     }
 } // end namespace
diff -upr beignet.orig/backend/src/llvm/llvm_loadstore_optimization.cpp beignet/backend/src/llvm/llvm_loadstore_optimization.cpp
--- beignet.orig/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-04-16 03:44:21.177289008 +0300
+++ beignet/backend/src/llvm/llvm_loadstore_optimization.cpp	2020-04-16 03:45:38.645879307 +0300
@@ -26,13 +26,13 @@
 
 using namespace llvm;
 namespace gbe {
-  class GenLoadStoreOptimization : public BasicBlockPass {
+  class GenLoadStoreOptimization : public FunctionPass {
 
   public:
     static char ID;
     ScalarEvolution *SE;
     const DataLayout *TD;
-    GenLoadStoreOptimization() : BasicBlockPass(ID) {}
+    GenLoadStoreOptimization() : FunctionPass(ID) {}
 
     void getAnalysisUsage(AnalysisUsage &AU) const {
 #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
@@ -45,7 +45,9 @@ namespace gbe {
       AU.setPreservesCFG();
     }
 
-    virtual bool runOnBasicBlock(BasicBlock &BB) {
+    virtual bool runOnFunction(Function &F) {
+        bool changedAnyBlock = false;
+        for (BasicBlock &BB : F) {
 #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
       SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
 #else
@@ -59,7 +61,9 @@ namespace gbe {
       #else
         TD = getAnalysisIfAvailable<DataLayout>();
       #endif
-      return optimizeLoadStore(BB);
+           changedAnyBlock = optimizeLoadStore(BB) | changedAnyBlock;
+        }
+        return changedAnyBlock;
     }
     Type *getValueType(Value *insn);
     Value *getPointerOperand(Value *I);
@@ -159,7 +163,11 @@ namespace gbe {
       values.push_back(merged[i]);
     }
     LoadInst *ld = cast<LoadInst>(first);
+#if LLVM_VERSION_MAJOR < 10
     unsigned align = ld->getAlignment();
+#else
+    MaybeAlign align = ld->getAlign();
+#endif
     unsigned addrSpace = ld->getPointerAddressSpace();
     // insert before first load
     Builder.SetInsertPoint(ld);
@@ -352,7 +360,11 @@ namespace gbe {
 
     unsigned addrSpace = st->getPointerAddressSpace();
 
+#if LLVM_VERSION_MAJOR < 10
     unsigned align = st->getAlignment();
+#else
+    MaybeAlign align = st->getAlign();
+#endif
     // insert before the last store
     Builder.SetInsertPoint(last);
 
@@ -466,7 +478,7 @@ namespace gbe {
     return changed;
   }
 
-  BasicBlockPass *createLoadStoreOptimizationPass() {
+  FunctionPass *createLoadStoreOptimizationPass() {
     return new GenLoadStoreOptimization();
   }
 };
Only in beignet/backend/src/llvm: llvm_loadstore_optimization.cpp.orig
Only in beignet/backend/src/llvm: llvm_loadstore_optimization.cpp.rej
diff -upr beignet.orig/backend/src/llvm/llvm_passes.cpp beignet/backend/src/llvm/llvm_passes.cpp
--- beignet.orig/backend/src/llvm/llvm_passes.cpp	2020-04-16 03:44:21.177289008 +0300
+++ beignet/backend/src/llvm/llvm_passes.cpp	2020-04-16 03:45:04.135019035 +0300
@@ -37,7 +37,7 @@
 #include "sys/map.hpp"
 
 using namespace llvm;
-
+template class cfg::Update<BasicBlock *>;
 namespace gbe
 {
   bool isKernelFunction(const llvm::Function &F) {
@@ -219,13 +219,13 @@ namespace gbe
     return offset;
   }
 
-  class GenRemoveGEPPasss : public BasicBlockPass
+  class GenRemoveGEPPasss : public FunctionPass
   {
 
    public:
     static char ID;
     GenRemoveGEPPasss(const ir::Unit &unit) :
-      BasicBlockPass(ID),
+      FunctionPass(ID),
       unit(unit) {}
     const ir::Unit &unit;
     void getAnalysisUsage(AnalysisUsage &AU) const {
@@ -242,16 +242,18 @@ namespace gbe
 
     bool simplifyGEPInstructions(GetElementPtrInst* GEPInst);
 
-    virtual bool runOnBasicBlock(BasicBlock &BB)
+    virtual bool runOnFunction(Function &F)
     {
-      bool changedBlock = false;
+      bool changedAnyBlock = false;
+        for (BasicBlock &BB : F) {
       iplist<Instruction>::iterator I = BB.getInstList().begin();
       for (auto nextI = I, E = --BB.getInstList().end(); I != E; I = nextI) {
         iplist<Instruction>::iterator I = nextI++;
         if(GetElementPtrInst* gep = dyn_cast<GetElementPtrInst>(&*I))
-          changedBlock = (simplifyGEPInstructions(gep) || changedBlock);
+          changedAnyBlock = (simplifyGEPInstructions(gep) | changedAnyBlock);
       }
-      return changedBlock;
+        }
+      return changedAnyBlock;
     }
   };
 
@@ -367,7 +369,7 @@ namespace gbe
     return true;
   }
 
-  BasicBlockPass *createRemoveGEPPass(const ir::Unit &unit) {
+  FunctionPass *createRemoveGEPPass(const ir::Unit &unit) {
     return new GenRemoveGEPPasss(unit);
   }
 } /* namespace gbe */
diff -upr beignet.orig/backend/src/llvm/llvm_sampler_fix.cpp beignet/backend/src/llvm/llvm_sampler_fix.cpp
--- beignet.orig/backend/src/llvm/llvm_sampler_fix.cpp	2020-04-16 03:44:21.783970632 +0300
+++ beignet/backend/src/llvm/llvm_sampler_fix.cpp	2020-04-16 03:45:04.138352451 +0300
@@ -33,11 +33,13 @@ namespace gbe {
   class SamplerFix : public FunctionPass {
   public:
     SamplerFix() : FunctionPass(ID) {
+#if LLVM_VERSION_MAJOR < 10
 #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
 #else
       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
 #endif
+#endif
     }
 
     bool visitCallInst(CallInst *I) {
diff -upr beignet.orig/backend/src/llvm/llvm_scalarize.cpp beignet/backend/src/llvm/llvm_scalarize.cpp
--- beignet.orig/backend/src/llvm/llvm_scalarize.cpp	2020-04-16 03:44:21.670634504 +0300
+++ beignet/backend/src/llvm/llvm_scalarize.cpp	2020-04-16 03:45:04.141685867 +0300
@@ -96,11 +96,13 @@ namespace gbe {
 
     Scalarize() : FunctionPass(ID)
     {
+#if LLVM_VERSION_MAJOR < 10
 #if LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 35
       initializeDominatorTreeWrapperPassPass(*PassRegistry::getPassRegistry());
 #else
       initializeDominatorTreePass(*PassRegistry::getPassRegistry());
 #endif
+#endif
     }
 
     virtual bool runOnFunction(Function&);
Only in beignet/CMake: FindLLVM.cmake.orig
diff -upr beignet.orig/CMakeLists.txt beignet/CMakeLists.txt
--- beignet.orig/CMakeLists.txt	2020-04-16 03:44:21.137288022 +0300
+++ beignet/CMakeLists.txt	2020-04-16 03:45:04.131685618 +0300
@@ -80,7 +80,7 @@ elseif (COMPILER STREQUAL "CLANG")
 elseif (COMPILER STREQUAL "ICC")
   set (CMAKE_C_CXX_FLAGS "${CMAKE_C_CXX_FLAGS}  -wd2928 -Wall -fPIC -fstrict-aliasing -fp-model fast -msse4.1 -Wl,-E")
 endif ()
-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof")
 set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
 set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
 set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
diff -upr beignet.orig/utests/CMakeLists.txt beignet/utests/CMakeLists.txt
--- beignet.orig/utests/CMakeLists.txt	2020-04-16 03:44:21.220623410 +0300
+++ beignet/utests/CMakeLists.txt	2020-04-16 03:45:04.131685618 +0300
@@ -26,8 +26,8 @@ if (NOT NOT_BUILD_STAND_ALONE_UTEST)
   # Threads
   Find_Package(Threads)
 
-  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -std=c++0x -Wno-invalid-offsetof")
-  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS}")
+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_CXX_FLAGS} -Wno-invalid-offsetof -ffloat-store -fno-strict-aliasing")
+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_CXX_FLAGS} -ffloat-store -fno-strict-aliasing") #compiler_{degrees,radians,function_argument2} use equality comparison of floats, compiler_long_bitcast uses aliasing
   set (CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -DGBE_DEBUG=1")
   set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DGBE_DEBUG=1")
   set (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG -DGBE_DEBUG=0")
